<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>Hello React!</title>
<!-- 先引入react,再引入react-dom,因为react是核心库，react-dom是扩展库 -->
<!-- 引入以后全局多了一个REACT和ReactDOM对象 -->
<script src="https://cdn.staticfile.org/react/16.4.0/umd/react.development.js"></script>
<script src="https://cdn.staticfile.org/react-dom/16.4.0/umd/react-dom.development.js"></script>
<!-- 用于将jsx转为js -->
<script src="https://cdn.staticfile.org/babel-standalone/6.26.0/babel.min.js"></script>
</head>
<body>
<!-- 准备好一个容器 -->
<div id="example"></div>
<div id="example1"></div>
<div id="example2"></div>
<!-- 此处一定要写babel，不写就是默认js -->
<script type="text/babel">
// 随着你的输入维护状态就是受控组件
/* 
  高阶函数：如果一个函数符合下面的2个规范中的一个，那该函数就是高阶函数
     1.若A函数，接收的参数是一个函数，那么可以称为高阶函数
     2.若A函数，调用的返回值是一个函数，那么可以称为高阶函数
     常见的高阶函数：Promise,setTimeout,arr.map()
  函数的柯里化，通过函数调用继续返回函数的方式，实现多次接收参数最后统一处理的函数编码形式


*/
class Login extends React.Component {

  constructor(props){
    super(props)
    this.state = {
      username: "",
      password: ""
    }
  }
  // 这里就用到了函数柯里化
  saveFormData = (dataType) => {
    this.setState({username:event.target.value})
    return (event) => {
      this.setState({[dataType]:event.target.value})
    }
  }
  handleSubmit = (event) => {
    event.preventDefault()  // 阻止表单提交
    const {username,password} = this   
    console.log("用户名:"+username,"密码:"+password);
  }

  render(){
    return (
      <form action="http://www.baidu.com" onSubmit={this.handleSubmit}>
        用户名:<input type="text" name="username" onChange={this.saveFormData('username')}/>
        密码: <input  type="password" name="password" onChange={this.saveFormData('password')}/>
        <button>登录</button>
      </form>
    )
  }
}



ReactDOM.render(
	<Login/>,
	document.getElementById('example')
);



function demo() {
  console.log("nihao");
}
</script>

</body>
</html>